{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-salesforce-core",
      "artifactVersion": "2023.0.2",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.salesforce.core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.salesforce",
        "id": "grp:org.nuxeo.salesforce",
        "name": "org.nuxeo.salesforce",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-salesforce-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-salesforce-master/)\n\n# Nuxeo Salesforce\n\nThis project provide an integration of Nuxeo inside Salesforce pages. The project is made of two modules: the Nuxeo plugin bundle `nuxeo-salesforce-core` and the LWC salesforce application `nuxeo-sfdc`.   \n\nHere, you can find more details about the **[Nuxeo LWC Application](nuxeo-sfdc/README.md)**.\n\n##License\n\n(C) Copyright 2015 Nuxeo SA (http://nuxeo.com/). This is unpublished proprietary source code of Nuxeo SA. All rights reserved. Notice of copyright on this source code does not indicate publication.\n    \n",
            "digest": "2692aa0dfa96d6bcea7bbe188193c6ed",
            "encoding": "UTF-8",
            "length": 702,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2023.11"
      },
      "bundleId": "org.nuxeo.salesforce.core",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.automation.contrib/Contributions/org.nuxeo.salesforce.automation.contrib--operation",
              "id": "org.nuxeo.salesforce.automation.contrib--operation",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operation\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n    <scriptedOperation id=\"Salesforce.TouchSFLibrary\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>javascript</category>\n      <param name=\"update\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            var update = params.update;\n            var properties = {\n                 \"dc:title\" : sfobject.Name,\n                 \"sf:objectId\" : sfobject.Id,\n                 \"sf:objectType\" : sfobject.sobjectType,\n                 \"dc:description\" : sfobject.Description || '',\n            };\n            if ('Amount' in sfobject) {\n                properties[\"sf:objectAmount\"] = sfobject.Amount ? sfobject.Amount.toString() : null;\n            }\n            if (update) {\n                return Document.Update(input, { 'properties': properties });\n            } else {\n                var docs = Repository.Query(null, {\n                    'query': \"SELECT * FROM Document WHERE ecm:isTrashed = 0 AND sf:objectId = '\" + sfobject.Id + \"' AND ecm:isVersion = 0 AND ecm:mixinType != 'HiddenInNavigation'\",\n                });\n                if (docs.length > 0) {\n                    return Repository.GetDocument(null, { 'value': docs[0].id });\n                } else {\n                    return Document.Create(input, {\n                        \"type\" : \"Workspace\",\n                        \"name\" : sfobject.Name.replace(/[^A-Za-z0-9_.-]+/g, '-'),\n                        \"properties\" : properties\n                    });\n                }\n            }\n        }]]>\n      </script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"Salesforce.LinkAsSource\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>Salesforce</category>\n      <param name=\"unlink\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            Auth.LoginAs(null, {\n            \t'name': null\n            }); // login as sys admin\n            var doc = Salesforce.LinkDocument(input, {\n            \t'unlink': params.unlink,\n            \t'objectId': sfobject.Id \n            });\n            Audit.LogEvent(input, {\n            \t'event': params.unlink ? 'DocumentUnlinkedFromSalesforceObject' : 'DocumentLinkedToSalesforceObject',\n            \t'category': 'Salesforce',\n            \t'comment': sfobject.Name + ' - ' +sfobject.Id \n            })\n            return doc;\n        }]]>\n      </script>\n    </scriptedOperation>\n    \n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.automation.contrib",
          "name": "org.nuxeo.salesforce.automation.contrib",
          "requirements": [],
          "resolutionOrder": 836,
          "services": [],
          "startOrder": 727,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.automation.contrib\">\n  <extension\n          target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\"\n          point=\"operation\">\n    <scriptedOperation id=\"Salesforce.TouchSFLibrary\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>javascript</category>\n      <param name=\"update\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            var update = params.update;\n            var properties = {\n                 \"dc:title\" : sfobject.Name,\n                 \"sf:objectId\" : sfobject.Id,\n                 \"sf:objectType\" : sfobject.sobjectType,\n                 \"dc:description\" : sfobject.Description || '',\n            };\n            if ('Amount' in sfobject) {\n                properties[\"sf:objectAmount\"] = sfobject.Amount ? sfobject.Amount.toString() : null;\n            }\n            if (update) {\n                return Document.Update(input, { 'properties': properties });\n            } else {\n                var docs = Repository.Query(null, {\n                    'query': \"SELECT * FROM Document WHERE ecm:isTrashed = 0 AND sf:objectId = '\" + sfobject.Id + \"' AND ecm:isVersion = 0 AND ecm:mixinType != 'HiddenInNavigation'\",\n                });\n                if (docs.length > 0) {\n                    return Repository.GetDocument(null, { 'value': docs[0].id });\n                } else {\n                    return Document.Create(input, {\n                        \"type\" : \"Workspace\",\n                        \"name\" : sfobject.Name.replace(/[^A-Za-z0-9_.-]+/g, '-'),\n                        \"properties\" : properties\n                    });\n                }\n            }\n        }]]>\n      </script>\n    </scriptedOperation>\n\n    <scriptedOperation id=\"Salesforce.LinkAsSource\">\n      <inputType>document</inputType>\n      <outputType>document</outputType>\n      <category>Salesforce</category>\n      <param name=\"unlink\" type=\"Boolean\"/>\n      <param name=\"record\" type=\"Object\"/>\n      <script>\n        <![CDATA[function run(input, params) {\n            var sfobject = JSON.parse(params.record);\n            Auth.LoginAs(null, {\n            \t'name': null\n            }); // login as sys admin\n            var doc = Salesforce.LinkDocument(input, {\n            \t'unlink': params.unlink,\n            \t'objectId': sfobject.Id \n            });\n            Audit.LogEvent(input, {\n            \t'event': params.unlink ? 'DocumentUnlinkedFromSalesforceObject' : 'DocumentLinkedToSalesforceObject',\n            \t'category': 'Salesforce',\n            \t'comment': sfobject.Name + ' - ' +sfobject.Id \n            })\n            return doc;\n        }]]>\n      </script>\n    </scriptedOperation>\n    \n  </extension>\n    \n</component>\n",
          "xmlFileName": "/OSGI-INF/automation-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib/Contributions/org.nuxeo.salesforce.schema.contrib--schema",
              "id": "org.nuxeo.salesforce.schema.contrib--schema",
              "registrationOrder": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"salesforce\" prefix=\"sf\" src=\"schema/salesforce.xsd\"/>\n    <schema name=\"salesforce_search\" prefix=\"sfs\" src=\"schema/salesforce_search.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib/Contributions/org.nuxeo.salesforce.schema.contrib--doctype",
              "id": "org.nuxeo.salesforce.schema.contrib--doctype",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"salesforce\">\n      <schema name=\"salesforce\"/>\n    </facet>\n    <doctype append=\"true\" name=\"Workspace\">\n      <facet name=\"salesforce\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"SalesforceSearch\">\n      <facet name=\"HiddenInNavigation\"/>\n      <schema name=\"salesforce_search\"/>\n    </doctype>\n    \n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.schema.contrib",
          "name": "org.nuxeo.salesforce.schema.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 837,
          "services": [],
          "startOrder": 730,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.schema.contrib\">\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"schema\">\n    <schema name=\"salesforce\" prefix=\"sf\" src=\"schema/salesforce.xsd\"/>\n    <schema name=\"salesforce_search\" prefix=\"sfs\" src=\"schema/salesforce_search.xsd\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n      point=\"doctype\">\n    <facet name=\"salesforce\">\n      <schema name=\"salesforce\" />\n    </facet>\n    <doctype name=\"Workspace\" append=\"true\">\n      <facet name=\"salesforce\"/>\n    </doctype>\n\n    <doctype name=\"SalesforceSearch\" extends=\"Document\">\n      <facet name=\"HiddenInNavigation\" />\n      <schema name=\"salesforce_search\" />\n    </doctype>\n    \n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/schema-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--corsConfig",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.cors/Contributions/org.nuxeo.salesforce.cors--corsConfig",
              "id": "org.nuxeo.salesforce.cors--corsConfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"corsConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n    <corsConfig name=\"nuxeo-sfdc\" supportedMethods=\"GET,POST,HEAD,OPTIONS,DELETE,PUT\">\n      <pattern>/nuxeo/.*</pattern>\n    </corsConfig>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.cors",
          "name": "org.nuxeo.salesforce.cors",
          "requirements": [],
          "resolutionOrder": 838,
          "services": [],
          "startOrder": 729,
          "version": "2023.0.2",
          "xmlFileContent": "<component name=\"org.nuxeo.salesforce.cors\">\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\" point=\"corsConfig\">\n    <corsConfig name=\"nuxeo-sfdc\" supportedMethods=\"GET,POST,HEAD,OPTIONS,DELETE,PUT\">\n      <pattern>/nuxeo/.*</pattern>\n    </corsConfig>\n  </extension>\n</component>\n\n",
          "xmlFileName": "/OSGI-INF/cors-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--sessionManager",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.auth.contrib/Contributions/org.nuxeo.salesforce.auth.contrib--sessionManager",
              "id": "org.nuxeo.salesforce.auth.contrib--sessionManager",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "name": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"sessionManager\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <sessionManager class=\"org.nuxeo.salesforce.SalesforceSessionManager\" enabled=\"true\" name=\"Salesforce\">\n    </sessionManager>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.auth.contrib",
          "name": "org.nuxeo.salesforce.auth.contrib",
          "requirements": [],
          "resolutionOrder": 839,
          "services": [],
          "startOrder": 726,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.auth.contrib\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"sessionManager\">\n\n    <sessionManager name=\"Salesforce\" enabled=\"true\"\n      class=\"org.nuxeo.salesforce.SalesforceSessionManager\">\n    </sessionManager>\n  </extension>\n    \n</component>",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.services.resource.ResourceService--resources",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata/Contributions/org.nuxeo.salesforce.business-metadata--resources",
              "id": "org.nuxeo.salesforce.business-metadata--resources",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.services.resource.ResourceService",
                "name": "org.nuxeo.runtime.services.resource.ResourceService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.runtime.services.resource.ResourceService\">\n    <!-- resource name=\"salesforce-business-metadata\">salesforce-business-metadata.ftl</resource -->\n    <resource name=\"salesforce-business-metadata\">OSGI-INF/salesforce-business-metadata.ftl</resource>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata/Contributions/org.nuxeo.salesforce.business-metadata--operation",
              "id": "org.nuxeo.salesforce.business-metadata--operation",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operation\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n\n\t<!--\n\tAn operation which is generating a HTML fragment displaying the business metadata    \n\t-->\n    <scriptedOperation id=\"Salesforce.RenderBusinessMetadata\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>Salesforce</category>\n\t  <param name=\"lang\" type=\"String\"/>\n\t        \n      <script>\n        <![CDATA[function run(input, params) {\n        \t// push the client language in the context\n        \tctx.SALESFORCE_LANG = params.lang;\n        \tvar blob = Render.Document(input, {\n        \t\ttemplate: 'template:salesforce-business-metadata'        \t\t\n        \t});\n        \t\n        \treturn blob.getString(); // return the html fragment as a string\n        }]]>\n      </script>\n    </scriptedOperation>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.business-metadata",
          "name": "org.nuxeo.salesforce.business-metadata",
          "requirements": [],
          "resolutionOrder": 840,
          "services": [],
          "startOrder": 728,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.business-metadata\">\n\n  <!-- \n  Register the template to be used by Salesforce.RenderBusinessMetadata\n  See com.quandora.web.rendering.api.DefaultDocumentView for all the fields available on a Document object in a freemarker template\n  See org.nuxeo.ecm.automation.core.scripting.Scripting initBindings method for global variables available in the template \n  You can debug by putting the  resource inside the data/resources folder and referencing it using the relative name from that folder. \n  -->\n  <extension target=\"org.nuxeo.runtime.services.resource.ResourceService\" point=\"resources\">\n    <!-- resource name=\"salesforce-business-metadata\">salesforce-business-metadata.ftl</resource -->\n    <resource name=\"salesforce-business-metadata\">OSGI-INF/salesforce-business-metadata.ftl</resource>\n  </extension>\n\n  <extension\n          target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\"\n          point=\"operation\">\n\n\t<!--\n\tAn operation which is generating a HTML fragment displaying the business metadata    \n\t-->\n    <scriptedOperation id=\"Salesforce.RenderBusinessMetadata\">\n      <inputType>document</inputType>\n      <outputType>blob</outputType>\n      <category>Salesforce</category>\n\t  <param name=\"lang\" type=\"String\" />\n\t        \n      <script>\n        <![CDATA[function run(input, params) {\n        \t// push the client language in the context\n        \tctx.SALESFORCE_LANG = params.lang;\n        \tvar blob = Render.Document(input, {\n        \t\ttemplate: 'template:salesforce-business-metadata'        \t\t\n        \t});\n        \t\n        \treturn blob.getString(); // return the html fragment as a string\n        }]]>\n      </script>\n    </scriptedOperation>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/business-metadata.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.salesforce.SalesforceComponent",
          "documentation": "\n  A service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance. \n  \n",
          "documentationHtml": "<p>\nA service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.salesforce.SalesforceComponent",
              "descriptors": [
                "org.nuxeo.salesforce.config.LibraryAppConfigDescriptor",
                "org.nuxeo.salesforce.config.DocListAppConfigDescriptor",
                "org.nuxeo.salesforce.config.SearchAppConfigDescriptor"
              ],
              "documentation": "Configure the library app\n",
              "documentationHtml": "<p>\nConfigure the library app</p>",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/ExtensionPoints/org.nuxeo.salesforce.SalesforceComponent--config",
              "id": "org.nuxeo.salesforce.SalesforceComponent--config",
              "label": "config (org.nuxeo.salesforce.SalesforceComponent)",
              "name": "config",
              "version": "2023.0.2"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--operations",
              "id": "org.nuxeo.salesforce.SalesforceComponent--operations",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceConfigProvider\"/>\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceValidateConnection\"/>\n    <operation class=\"org.nuxeo.salesforce.operations.LinkDocument\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--bindings",
              "id": "org.nuxeo.salesforce.SalesforceComponent--bindings",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <binding name=\"Salesforce.ConfigProvider\"/>\n    <binding name=\"Salesforce.ValidateConnection\"/>\n    <binding name=\"Salesforce.LinkDocument\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--marshallers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--marshallers",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n      <register class=\"org.nuxeo.salesforce.enrichers.ExternalDownloadURLJsonEnricher\" enable=\"true\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.salesforce.SalesforceComponent--config",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--config",
              "id": "org.nuxeo.salesforce.SalesforceComponent--config",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.salesforce.SalesforceComponent",
                "name": "org.nuxeo.salesforce.SalesforceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"config\" target=\"org.nuxeo.salesforce.SalesforceComponent\">\n      <library>\n        <!-- title>Nuxeo Library</title -->\n      \t<root>/default-domain/workspaces</root>\n      \t<nuxeo-drive>true</nuxeo-drive>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>\n      \t<!--\n      \tYou can control which doc tab, data section, doc action or nav actions are visible. \n      \tIf not specified or empty all items are visible:\n      \t<doc-tabs>preview,data,history</doc-tabs>  \n      \t<data-sections>metadata,business-metadata,attachments,renditions,mlt</data-sections>\n      \t<doc-actions>edit,open,download,upload,lock</doc-actions>\n      \t<nav-actions>download,open,edit,delete</nav-actions>\n      \tThe custom nav. actions are added to the built-in nav-actions. You should define a label, a Salesforce icon ID \n      \tand an operation to be invoked bny the action \n      \t<custom-nav-actions>\n      \t\t<action name='myaction' label=\"My Action\" icon=\"action:new_note\" operation=\"Salesforce.MyAction\" />\n      \t\t...\n      \t</custom-nav-actions>\n      \t\n      \tTo add custom user fields:\n        <user-fields>NuxeoUserId__c,Team__c</user-fields>\n        \n        You can change the default open action to open the document in nuxeo:\n        (The default is to open the document in the document viewer on the right of the listing.)   \n        <open-doc-in-nuxeo>true</open-doc-in-nuxeo>\n        \n      \t<preview>\n      \tfunction(doc) {\n      \t\t// the doc object is an instance of the FileDoc class from force-app/main/default/lwc/nuxeoClient/model.js\n      \t\t// the doc.doc object is the Nuxeo document defined in nuxeo javascript client.\n      \t\t// Refer to FileDoc for more on the API it expose.\n      \t\t// You can return null (or falsy) to let the client use the default rendition detection.         \t\t\n      \t\treturn {\n      \t\t\tviewer: \"video\" | \"audio\" | \"image\" | \"pdf\" | \"html\" | \"text\" | \"binary\",\n      \t\t\trendition: renditionId\n      \t\t\tcontent: xpath\n      \t\t\ttype: mime-type // optional mime type - must be specified for videos.\n      \t\t}\n      \t}\n      \t</preview>\n      \t -->\n      </library>\n      <listing>\n        <!-- title>Nuxeo Documents</title -->\n      \t<nuxeo-drive>true</nuxeo-drive>      \t\n      \t<upload>true</upload>\n      \t<link-operation>Salesforce.LinkAsSource</link-operation>\n      \t<link-test>\n      \tfunction(doc, recordId) {\n            var source = doc.properties['dc:source'];\n            return source ? source === recordId || source.split(',').indexOf(recordId) &gt; -1 : false;\n      \t}\n      \t</link-test>\n      \t<!--\n      \tThe query element defines a custom javascript function to be used by the client to create the search call \n      \tfor the listing and listing search requests.    \n      \tThe context object describe the client context and can be used to compute the page provider or other parameters\n      \tto pass to the search. The context object contains the following properties: repositoryName, appType, appConfig, \n      \trecordId, recordType, record and env. The **env** property is a custom environment object \n      \tthat can be defined by external components. (by default it is an empty object)\n      \t\n      \tNote that we wrap the recordId inside % characters - to be able to use the LIKE operator in the fixed part of the sfdc_linked_docs page provider     \n      \t -->\n      \t<query>\n      \tfunction(context, params) {\n      \t\tparams.pageProvider = \"sfdc_linked_docs\";\n      \t\tparams.recordId = '%'+context.recordId+'%';\n      \t}\n      \t</query>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>      \t\n      </listing>\n      <search>\n        <!--  title>Nuxeo Search</title -->\n        <nuxeo-drive>true</nuxeo-drive>\n      \t<page-provider>default_search</page-provider>\n      </search>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--providers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--providers",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n  \t<coreQueryPageProvider name=\"sfdc_load_library\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      \t</fixedPart>\n        <predicate operator=\"=\" parameter=\"sf:objectId\">\n          <field name=\"recordId\" schema=\"salesforce_search\"/>\n        </predicate>\n      </whereClause>\n      <sort ascending=\"false\" column=\"dc:created\"/>      \n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  \n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0 AND dc:source LIKE :recordId\n      \t</fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"ecm:fulltext\">\n          <field name=\"ecm_fulltext\" schema=\"salesforce_search\"/>\n        </predicate>\n      </whereClause>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <!--  sort column=\"dc:modified\" ascending=\"false\" / -->\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--contextHelpers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Contributions/org.nuxeo.salesforce.SalesforceComponent--contextHelpers",
              "id": "org.nuxeo.salesforce.SalesforceComponent--contextHelpers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"contextHelpers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <contextHelper class=\"org.nuxeo.salesforce.SalesforceFunctions\" id=\"Salesforce\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent",
          "name": "org.nuxeo.salesforce.SalesforceComponent",
          "requirements": [],
          "resolutionOrder": 841,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.SalesforceComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.SalesforceComponent/Services/org.nuxeo.salesforce.SalesforceComponent",
              "id": "org.nuxeo.salesforce.SalesforceComponent",
              "overriden": false,
              "version": "2023.0.2"
            }
          ],
          "startOrder": 930,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.salesforce.SalesforceComponent\" version=\"1.0\">\n  <documentation>\n  A service to configure remote a remote Nuxeo Salesforce application connecting to this Nuxeo instance. \n  </documentation>\n\n  <implementation class=\"org.nuxeo.salesforce.SalesforceComponent\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.salesforce.SalesforceComponent\" />\n  </service>\n\n  <extension-point name=\"config\">\n    <documentation>Configure the library app</documentation>\n    <object class=\"org.nuxeo.salesforce.config.LibraryAppConfigDescriptor\"/>\n    <object class=\"org.nuxeo.salesforce.config.DocListAppConfigDescriptor\"/>\n    <object class=\"org.nuxeo.salesforce.config.SearchAppConfigDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceConfigProvider\" />\n    <operation class=\"org.nuxeo.salesforce.config.SalesforceValidateConnection\" />\n    <operation class=\"org.nuxeo.salesforce.operations.LinkDocument\" />\n  </extension>\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n    <binding name=\"Salesforce.ConfigProvider\"></binding>\n    <binding name=\"Salesforce.ValidateConnection\"></binding>\n    <binding name=\"Salesforce.LinkDocument\"></binding>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n      <register class=\"org.nuxeo.salesforce.enrichers.ExternalDownloadURLJsonEnricher\" enable=\"true\" />\n  </extension>\n\n  <!-- \n  Default configuration. \n  -->\n  <extension target=\"org.nuxeo.salesforce.SalesforceComponent\"\n      point=\"config\">\n      <library>\n        <!-- title>Nuxeo Library</title -->\n      \t<root>/default-domain/workspaces</root>\n      \t<nuxeo-drive>true</nuxeo-drive>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>\n      \t<!--\n      \tYou can control which doc tab, data section, doc action or nav actions are visible. \n      \tIf not specified or empty all items are visible:\n      \t<doc-tabs>preview,data,history</doc-tabs>  \n      \t<data-sections>metadata,business-metadata,attachments,renditions,mlt</data-sections>\n      \t<doc-actions>edit,open,download,upload,lock</doc-actions>\n      \t<nav-actions>download,open,edit,delete</nav-actions>\n      \tThe custom nav. actions are added to the built-in nav-actions. You should define a label, a Salesforce icon ID \n      \tand an operation to be invoked bny the action \n      \t<custom-nav-actions>\n      \t\t<action name='myaction' label=\"My Action\" icon=\"action:new_note\" operation=\"Salesforce.MyAction\" />\n      \t\t...\n      \t</custom-nav-actions>\n      \t\n      \tTo add custom user fields:\n        <user-fields>NuxeoUserId__c,Team__c</user-fields>\n        \n        You can change the default open action to open the document in nuxeo:\n        (The default is to open the document in the document viewer on the right of the listing.)   \n        <open-doc-in-nuxeo>true</open-doc-in-nuxeo>\n        \n      \t<preview>\n      \tfunction(doc) {\n      \t\t// the doc object is an instance of the FileDoc class from force-app/main/default/lwc/nuxeoClient/model.js\n      \t\t// the doc.doc object is the Nuxeo document defined in nuxeo javascript client.\n      \t\t// Refer to FileDoc for more on the API it expose.\n      \t\t// You can return null (or falsy) to let the client use the default rendition detection.         \t\t\n      \t\treturn {\n      \t\t\tviewer: \"video\" | \"audio\" | \"image\" | \"pdf\" | \"html\" | \"text\" | \"binary\",\n      \t\t\trendition: renditionId\n      \t\t\tcontent: xpath\n      \t\t\ttype: mime-type // optional mime type - must be specified for videos.\n      \t\t}\n      \t}\n      \t</preview>\n      \t -->\n      </library>\n      <listing>\n        <!-- title>Nuxeo Documents</title -->\n      \t<nuxeo-drive>true</nuxeo-drive>      \t\n      \t<upload>true</upload>\n      \t<link-operation>Salesforce.LinkAsSource</link-operation>\n      \t<link-test>\n      \tfunction(doc, recordId) {\n            var source = doc.properties['dc:source'];\n            return source ? source === recordId || source.split(',').indexOf(recordId) > -1 : false;\n      \t}\n      \t</link-test>\n      \t<!--\n      \tThe query element defines a custom javascript function to be used by the client to create the search call \n      \tfor the listing and listing search requests.    \n      \tThe context object describe the client context and can be used to compute the page provider or other parameters\n      \tto pass to the search. The context object contains the following properties: repositoryName, appType, appConfig, \n      \trecordId, recordType, record and env. The **env** property is a custom environment object \n      \tthat can be defined by external components. (by default it is an empty object)\n      \t\n      \tNote that we wrap the recordId inside % characters - to be able to use the LIKE operator in the fixed part of the sfdc_linked_docs page provider     \n      \t -->\n      \t<query>\n      \tfunction(context, params) {\n      \t\tparams.pageProvider = \"sfdc_linked_docs\";\n      \t\tparams.recordId = '%'+context.recordId+'%';\n      \t}\n      \t</query>\n      \t<!-- \n      \tyou can control the visibility of these columns: type, size, author, lastModified.\n      \tThe default is to hide the type column. \n      \t-->\n      \t<doclist-hidden-columns>type</doclist-hidden-columns>      \t\n      </listing>\n      <search>\n        <!--  title>Nuxeo Search</title -->\n        <nuxeo-drive>true</nuxeo-drive>\n      \t<page-provider>default_search</page-provider>\n      </search>\n  </extension>\n\n  <!-- default listing page provider -->\n  <!-- \n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n  \t  <pattern>\n      \tSELECT * FROM Document WHERE ecm:mixinType != 'HiddenInNavigation'\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n          AND dc:source = ? \n      </pattern>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>\n-->\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n  \t<coreQueryPageProvider name=\"sfdc_load_library\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      \t</fixedPart>\n        <predicate parameter=\"sf:objectId\" operator=\"=\">\n          <field schema=\"salesforce_search\" name=\"recordId\" />\n        </predicate>\n      </whereClause>\n      <sort column=\"dc:created\" ascending=\"false\" />      \n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  \n  \t<coreQueryPageProvider name=\"sfdc_linked_docs\">\n      <searchDocumentType>SalesforceSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n      \t  ecm:mixinType != 'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isTrashed = 0 AND dc:source LIKE :recordId\n      \t</fixedPart>\n        <predicate parameter=\"ecm:fulltext\" operator=\"FULLTEXT\">\n          <field schema=\"salesforce_search\" name=\"ecm_fulltext\" />\n        </predicate>\n      </whereClause>\n      <quickFilters>\n        <quickFilter name=\"noFolder\">\n          <clause>ecm:mixinType != 'Folderish'</clause>\n        </quickFilter>\n      </quickFilters>\n      <!--  sort column=\"dc:modified\" ascending=\"false\" / -->\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>  \t\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"contextHelpers\">\n    <contextHelper id=\"Salesforce\" class=\"org.nuxeo.salesforce.SalesforceFunctions\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SalesforceComponent.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "documentation": "\n  A service to store public and private RSA keys in a directory \n  \n",
          "documentationHtml": "<p>\nA service to store public and private RSA keys in a directory\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "descriptors": [
                "org.nuxeo.salesforce.jwt.SubjectMappingDescriptor"
              ],
              "documentation": "\n    Customize the way JWT subjects are mapped to Nuxeo users. \n    A different mapping can be defined for each issuer.\n    \n",
              "documentationHtml": "<p>\nCustomize the way JWT subjects are mapped to Nuxeo users.\nA different mapping can be defined for each issuer.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/ExtensionPoints/org.nuxeo.salesforce.jwt.JWTExchangeComponent--subject-mapping",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--subject-mapping",
              "label": "subject-mapping (org.nuxeo.salesforce.jwt.JWTExchangeComponent)",
              "name": "subject-mapping",
              "version": "2023.0.2"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--schema",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--schema",
              "registrationOrder": 50,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"jwt_keystore\" src=\"schema/jwt_keystore.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--directories",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--directories",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-directory\" name=\"jwt_keystore\">\n      <schema>jwt_keystore</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n    </directory>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Contributions/org.nuxeo.salesforce.jwt.JWTExchangeComponent--marshallers",
              "id": "org.nuxeo.salesforce.jwt.JWTExchangeComponent--marshallers",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2023.0.2",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyListWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "name": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
          "requirements": [],
          "resolutionOrder": 842,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Services/org.nuxeo.salesforce.jwt.JWTUserResolver",
              "id": "org.nuxeo.salesforce.jwt.JWTUserResolver",
              "overriden": false,
              "version": "2023.0.2"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.salesforce.jwt.JWTExchangeComponent",
              "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core/org.nuxeo.salesforce.jwt.JWTExchangeComponent/Services/org.nuxeo.salesforce.jwt.keystore.JWTKeyStore",
              "id": "org.nuxeo.salesforce.jwt.keystore.JWTKeyStore",
              "overriden": false,
              "version": "2023.0.2"
            }
          ],
          "startOrder": 931,
          "version": "2023.0.2",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\">\n\n  <documentation>\n  A service to store public and private RSA keys in a directory \n  </documentation>\n\n  <implementation class=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.salesforce.jwt.JWTUserResolver\" />  \n\t  <provide interface=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyStore\" />\t  \n  </service>\n\n  <extension-point name=\"subject-mapping\">\n    <documentation>\n    Customize the way JWT subjects are mapped to Nuxeo users. \n    A different mapping can be defined for each issuer.\n    </documentation>\n    <object class=\"org.nuxeo.salesforce.jwt.SubjectMappingDescriptor\"/>\n  </extension-point>\n<!-- \n  Example: \n  <extension target=\"org.nuxeo.salesforce.jwt.JWTExchangeComponent\" point=\"subject-mapping\">\n    <subject-mapping issuer=\"sfdc\" default=\"test\" />\n  </extension>\n-->\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"jwt_keystore\" src=\"schema/jwt_keystore.xsd\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory name=\"jwt_keystore\" extends=\"template-directory\">\n      <schema>jwt_keystore</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n    </directory>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.salesforce.jwt.keystore.JWTKeyListWriter\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/JWTKeyStoreComponent.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-salesforce-core-2023.0.2.jar",
      "groupId": "org.nuxeo.salesforce",
      "hierarchyPath": "/grp:org.nuxeo.salesforce/org.nuxeo.salesforce.core",
      "id": "org.nuxeo.salesforce.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.6.1\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.7\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.qualifier\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Salesforce Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-17\r\nBundle-Vendor: Nuxeo\r\nBundle-SymbolicName: org.nuxeo.salesforce.core\r\nNuxeo-WebModule: org.nuxeo.salesforce.web.WebApp;headless=true;name=sale\r\n sforce;package=org/nuxeo/salesforce/web\r\nNuxeo-Component: OSGI-INF/automation-contrib.xml,OSGI-INF/schema-contrib\r\n .xml,OSGI-INF/cors-config.xml,OSGI-INF/auth-contrib.xml,OSGI-INF/busine\r\n ss-metadata.xml,OSGI-INF/SalesforceComponent.xml,OSGI-INF/JWTKeyStoreCo\r\n mponent.xml\r\n\r\n",
      "maxResolutionOrder": 842,
      "minResolutionOrder": 836,
      "packages": [
        "nuxeo-salesforce"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://qa.nuxeo.org/jenkins/buildStatus/icon?job=addons_nuxeo-salesforce-master)](https://qa.nuxeo.org/jenkins/job/addons_nuxeo-salesforce-master/)\n\n# Nuxeo Salesforce\n\nThis project provide an integration of Nuxeo inside Salesforce pages. The project is made of two modules: the Nuxeo plugin bundle `nuxeo-salesforce-core` and the LWC salesforce application `nuxeo-sfdc`.   \n\nHere, you can find more details about the **[Nuxeo LWC Application](nuxeo-sfdc/README.md)**.\n\n##License\n\n(C) Copyright 2015 Nuxeo SA (http://nuxeo.com/). This is unpublished proprietary source code of Nuxeo SA. All rights reserved. Notice of copyright on this source code does not indicate publication.\n    \n",
        "digest": "2692aa0dfa96d6bcea7bbe188193c6ed",
        "encoding": "UTF-8",
        "length": 702,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.0.2"
    }
  ],
  "creationDate": 1714983515104,
  "key": "Nuxeo Platform-2023.11",
  "name": "Nuxeo Platform",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Salesforce",
      "contributingComponent": "org.nuxeo.salesforce.SalesforceComponent",
      "description": "Provides configuration for remote Nuxeo salesforce applications. Supported application types are: library, listing and search",
      "hierarchyPath": "/op:Salesforce.ConfigProvider",
      "label": "Salesforce ConfigProvider",
      "name": "Salesforce.ConfigProvider",
      "operationClass": "org.nuxeo.salesforce.config.SalesforceConfigProvider",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "app",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "config",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "recordId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "recordType",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "string"
      ],
      "url": "Salesforce.ConfigProvider",
      "version": "2023.11.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Salesforce",
      "contributingComponent": "org.nuxeo.salesforce.automation.contrib",
      "hierarchyPath": "/op:Salesforce.LinkAsSource",
      "label": "Salesforce.LinkAsSource",
      "name": "Salesforce.LinkAsSource",
      "operationClass": "org.nuxeo.automation.scripting.internals.ScriptingOperationImpl",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "unlink",
          "order": 0,
          "type": "Boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "record",
          "order": 0,
          "type": "Object",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document"
      ],
      "url": "Salesforce.LinkAsSource",
      "version": "2023.11.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.salesforce.SalesforceComponent",
      "description": "Link a document to a Salesforce object",
      "hierarchyPath": "/op:Salesforce.LinkDocument",
      "label": "Link Document To Salesforce Object",
      "name": "Salesforce.LinkDocument",
      "operationClass": "org.nuxeo.salesforce.operations.LinkDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "objectId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "unlink",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "url": "Salesforce.LinkDocument",
      "version": "2023.11.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Salesforce",
      "contributingComponent": "org.nuxeo.salesforce.business-metadata",
      "hierarchyPath": "/op:Salesforce.RenderBusinessMetadata",
      "label": "Salesforce.RenderBusinessMetadata",
      "name": "Salesforce.RenderBusinessMetadata",
      "operationClass": "org.nuxeo.automation.scripting.internals.ScriptingOperationImpl",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "String",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "blob"
      ],
      "url": "Salesforce.RenderBusinessMetadata",
      "version": "2023.11.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "javascript",
      "contributingComponent": "org.nuxeo.salesforce.automation.contrib",
      "hierarchyPath": "/op:Salesforce.TouchSFLibrary",
      "label": "Salesforce.TouchSFLibrary",
      "name": "Salesforce.TouchSFLibrary",
      "operationClass": "org.nuxeo.automation.scripting.internals.ScriptingOperationImpl",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "update",
          "order": 0,
          "type": "Boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "record",
          "order": 0,
          "type": "Object",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "document"
      ],
      "url": "Salesforce.TouchSFLibrary",
      "version": "2023.11.13"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Salesforce",
      "contributingComponent": "org.nuxeo.salesforce.SalesforceComponent",
      "description": "Validate the connection with a Nuxeo Salesforce application by checking the client version",
      "hierarchyPath": "/op:Salesforce.ValidateConnection",
      "label": "Salesforce ValidateConnection",
      "name": "Salesforce.ValidateConnection",
      "operationClass": "org.nuxeo.salesforce.config.SalesforceValidateConnection",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "version",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "details",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "boolean"
      ],
      "url": "Salesforce.ValidateConnection",
      "version": "2023.11.13"
    }
  ],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.salesforce.core"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-salesforce-2023.0.2",
      "id": "nuxeo-salesforce-2023.0.2",
      "name": "nuxeo-salesforce",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo for Salesforce",
      "version": "2023.0.2"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1714983515104,
  "version": "2023.11"
}